<?php
namespace app\common\model;

use app\common\lib\CoordinateTransform;
use think\Db;
use think\Model;

class BaseModel extends Model
{
    public $map_platform = [
        'app' => 'APP',
        'mobile' => '手机浏览器',
        'wechat' => '微信浏览器',
        'web' => '电脑浏览器',
        'system' => '系统',
    ];
    public $map_ad_platform = [
        'app' => 'APP',
        'mobile' => '触屏端',
        'web' => 'pc端',
    ];
    public $map_education = [
        1 => '初中',
        2 => '高中',
        3 => '中技',
        4 => '中专',
        5 => '大专',
        6 => '本科',
        7 => '硕士',
        8 => '博士',
        9 => '博后',
    ];
    public $map_experience = [
        1 => '应届生',
        2 => '1年',
        3 => '2年',
        4 => '3年',
        5 => '3-5年',
        6 => '5-10年',
        7 => '10年以上',
    ];
    public $map_is_display = [
        0 => '不显示',
        1 => '显示'
    ];
    public $map_is_public = [
        0 => '不公开',
        1 => '公开'
    ];
    public $school_985 = [
        "北京大学",
        "清华大学",
        "中国科学技术大学",
        "南京大学",
        "复旦大学",
        "上海交通大学",
        "西安交通大学",
        "浙江大学",
        "哈尔滨工业大学",
        "北京理工大学",
        "南开大学",
        "天津大学",
        "东南大学",
        "武汉大学",
        "华中科技大学",
        "吉林大学",
        "厦门大学",
        "山东大学",
        "中国海洋大学",
        "湖南大学",
        "中南大学",
        "大连理工大学",
        "北京航空航天大学",
        "重庆大学",
        "四川大学",
        "电子科技大学",
        "中山大学",
        "华南理工大学",
        "兰州大学",
        "西北工业大学",
        "东北大学",
        "同济大学",
        "北京师范大学",
        "中国人民大学",
        "中国农业大学",
        "国防科技大学",
        "中央民族大学",
        "华东师范大学",
        "西北农林科技大学"
    ];
    public $school_211 = [
        "清华大学",
        "北京大学",
        "中国人民大学",
        "北京交通大学",
        "北京工业大学",
        "北京航空航天大学",
        "北京理工大学",
        "北京科技大学",
        "北京化工大学",
        "北京邮电大学",
        "中国农业大学",
        "北京林业大学",
        "中国传媒大学",
        "中央民族大学",
        "北京师范大学",
        "中央音乐学院",
        "对外经济贸易大学",
        "北京中医药大学",
        "北京外国语大学",
        "中国地质大学",
        "中国矿业大学",
        "中国石油大学",
        "中国政法大学",
        "中央财经大学",
        "华北电力大学",
        "北京体育大学",
        "南开大学",
        "天津大学",
        "天津医科大学",
        "河北工业大学",
        "上海外国语大学",
        "复旦大学",
        "华东师范大学",
        "上海大学",
        "东华大学",
        "上海财经大学",
        "华东理工大学",
        "同济大学",
        "上海交通大学",
        "海军军医大学",
        "重庆大学",
        "西南大学",
        "太原理工大学",
        "内蒙古大学",
        "大连理工大学",
        "东北大学",
        "辽宁大学",
        "大连海事大学",
        "吉林大学",
        "东北师范大学",
        "延边大学",
        "哈尔滨工业大学",
        "哈尔滨工程大学",
        "东北农业大学",
        "东北林业大学",
        "南京大学",
        "东南大学",
        "苏州大学",
        "南京师范大学",
        "中国药科大学",
        "河海大学",
        "南京理工大学",
        "江南大学",
        "南京农业大学",
        "南京航空航天大学",
        "浙江大学",
        "中国科学技术大学",
        "安徽大学",
        "合肥工业大学",
        "厦门大学",
        "福州大学",
        "南昌大学",
        "山东大学",
        "中国海洋大学",
        "郑州大学",
        "武汉大学",
        "华中科技大学",
        "武汉理工大学",
        "中南财经政法大学",
        "华中师范大学",
        "华中农业大学",
        "湖南大学",
        "中南大学",
        "湖南师范大学",
        "国防科技大学",
        "中山大学",
        "暨南大学",
        "华南理工大学",
        "华南师范大学",
        "广西大学",
        "四川大学",
        "电子科技大学",
        "西南交通大学",
        "西南财经大学",
        "四川农业大学",
        "云南大学",
        "贵州大学",
        "西北大学",
        "西安交通大学",
        "西北工业大学",
        "长安大学",
        "西北农林科技大学",
        "陕西师范大学",
        "西安电子科技大学",
        "空军军医大学",
        "兰州大学",
        "海南大学",
        "宁夏大学",
        "青海大学",
        "西藏大学",
        "新疆大学",
        "石河子大学"
    ];
    public function getColumn()
    {
        $tablename = $this->getTablename();
        if (false === ($columbs = cache('cache_table_column_' . $tablename))) {
            $res = \think\Db::query(
                'SHOW COLUMNS FROM ' . config('database.prefix') . $tablename
            );
            $columbs = array_column($res, 'Field');
            cache('cache_table_column_' . $tablename, $columbs);
        }
        return $columbs;
    }
    public function getName()
    {
        return $this->name;
    }
    public function getTablename()
    {
        return uncamelize($this->name);
    }
    protected function check_spell_repeat($spell, $index = 0, $id = 0)
    {
        $spell = del_punctuation($spell);
        $spell_index = $index == 0 ? $spell : $spell . $index;
        $map['spell'] = array('eq', $spell_index);
        if ($id > 0) {
            $map['id'] = array('neq', $id);
        }
        $has = $this->where($map)->find();
        if ($has) {
            $index++;
            $spell_index = $this->check_spell_repeat($spell, $index, $id);
        }
        return $spell_index;
    }
    /**
     * 处理薪资显示
     */
    public function handle_wage($minwage, $maxwage, $negotiable = 0)
    {
        $wage_unit = config('global_config.wage_unit');
        if ($negotiable == 0) {
            if ($wage_unit == 1) {
                $minwage =
                $minwage % 1000 == 0
                ? $minwage / 1000 . 'K'
                : round($minwage / 1000, 1) . 'K';
                $maxwage = $maxwage
                ? ($maxwage % 1000 == 0
                    ? $maxwage / 1000 . 'K'
                    : round($maxwage / 1000, 1) . 'K')
                : 0;
            } elseif ($wage_unit == 2) {
                if ($minwage >= 10000) {
                    if ($minwage % 10000 == 0) {
                        $minwage = $minwage / 10000 . '万';
                    } else {
                        $minwage = round($minwage / 10000, 1);
                        $minwage = strpos($minwage, '.')
                        ? str_replace('.', '万', $minwage)
                        : $minwage . '万';
                    }
                } elseif ($minwage < 1000) {
                    $minwage = $minwage;
                } else {
                    if ($minwage % 1000 == 0) {
                        $minwage = $minwage / 1000 . '千';
                    } else {
                        $minwage = round($minwage / 1000, 1);
                        $minwage = strpos($minwage, '.')
                        ? str_replace('.', '千', $minwage)
                        : $minwage . '千';
                    }
                }
                if ($maxwage >= 10000) {
                    if ($maxwage % 10000 == 0) {
                        $maxwage = $maxwage / 10000 . '万';
                    } else {
                        $maxwage = round($maxwage / 10000, 1);
                        $maxwage = strpos($maxwage, '.')
                        ? str_replace('.', '万', $maxwage)
                        : $maxwage . '万';
                    }
                } elseif ($maxwage) {
                    if ($maxwage % 1000 == 0) {
                        $maxwage = $maxwage / 1000 . '千';
                    } else {
                        $maxwage = round($maxwage / 1000, 1);
                        $maxwage = strpos($maxwage, '.')
                        ? str_replace('.', '千', $maxwage)
                        : $maxwage . '千';
                    }
                } else {
                    $maxwage = 0;
                }
            }
            if ($maxwage == 0) {
                $return = '面议';
            } else {
                if ($minwage == $maxwage) {
                    $return = $minwage;
                } else {
                    $return = $minwage . '~' . $maxwage;
                }
            }
        } else {
            $return = '面议';
        }
        return $return;
    }

    /**
     * 天地图转百度地图坐标系
     */
    public function wgs84ToBd09($lng,$lat)
    {
        if (intval($lng) === 0 || intval($lat) === 0){
            return ['lng'=>$lng, 'lat'=>$lat];
        }
        if (config('global_config.map_type') == 2){
            $CoordinateTransform = new CoordinateTransform();
            $coordinate = $CoordinateTransform->wgs84ToBd09($lng,$lat);
            $lng = !empty($coordinate[0]) ? $coordinate[0] : 0;
            $lat = !empty($coordinate[1]) ? $coordinate[1] : 0;
        }
        return ['lng'=>$lng, 'lat'=>$lat];
    }
    /**
     * 百度地图转天地图坐标系
     */
    public function bd09ToWgs84($lng,$lat){

        if (intval($lng) === 0 || intval($lat) === 0){
            return ['lng'=>$lng, 'lat'=>$lat];
        }
        if (config('global_config.map_type') == 2){
            $CoordinateTransform = new CoordinateTransform();
            $coordinate = $CoordinateTransform->bd09ToWgs84($lng,$lat);
            $lng = !empty($coordinate[1]) ? $coordinate[1] : 0;
            $lat = !empty($coordinate[0]) ? $coordinate[0] : 0;
        }
        return ['lng'=>$lng, 'lat'=>$lat];
    }

    public function groupBy($data,$group_id=null){
        if(!$group_id){
            return $data;
        }
        $result = [];
        foreach ($data as $value){
            $result[$value[$group_id]][] = is_array($value)?$value:$value->toArray();
        }
        return $result;
    }
    public function updateBatch($multipleData = [],$update_field=null)
    {
        try {

            if (empty($multipleData)) {
                dolog('updateBatch',"批量更新数据为空",true,true);
                return false;
            }

            $tableName = $this->getConfig('prefix') . $this->getTablename(); // 表名
            $firstRow = current($multipleData);

            $updateColumn = array_keys($firstRow);
            // 默认以id为条件更新，如果没有ID则以第一个字段为条件
            $referenceColumn = $update_field?:(isset($firstRow['id']) ? 'id' : current($updateColumn));

//            unset($updateColumn[0]);

            // 拼接sql语句
            $updateSql = "UPDATE " . $tableName . " SET ";
            $sets = [];
            $bindings = [];
            foreach ($updateColumn as $uColumn) {
                $setSql = "`" . $uColumn . "` = CASE ";
                foreach ($multipleData as $data) {
                    $bindings[] = $data[$referenceColumn];
                    if(strstr($data[$uColumn],$uColumn)){
                        $setSql .= "WHEN `" . $referenceColumn . "` = ? THEN " .$data[$uColumn] ." ";
                    }else{
                        $setSql .= "WHEN `" . $referenceColumn . "` = ? THEN ? ";
                        $bindings[] = $data[$uColumn];
                    }


                }
                $setSql .= "ELSE `" . $uColumn . "` END ";
                $sets[] = $setSql;
            }
            $updateSql .= implode(', ', $sets);
            $whereIn = collection($multipleData)->column($referenceColumn);
            $bindings = array_merge($bindings, $whereIn);
            $whereIn = rtrim(str_repeat('?,', count($whereIn)), ',');
            $updateSql = rtrim($updateSql, ", ") . " WHERE `" . $referenceColumn . "` IN (" . $whereIn . ")";
            //Log::info($bindings);
            // 传入预处理sql语句和对应绑定数据

            return $this->query($updateSql, $bindings);
        } catch (\Exception $e) {
            dolog('updateBatchError:'.($tableName??''),[$e->getMessage(),$e->getFile(),$e->getLine()],1,1);
            return false;
        }
    }
}
